package com.groupbuying.store.service;

import com.groupbuying.store.domain.StoreAccountDO;
import com.groupbuying.store.dto.LoginDTO;
import com.groupbuying.store.dto.forManage.StoreAccountDTO;
import com.groupbuying.store.utils.R;
import com.groupbuying.store.utils.apiresult.ApiResult;
import com.groupbuying.store.vo.forManage.StoreAccountVO;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 商户表
 *
 * @author yuwenxiaodong
 * @email yuwenxiaodong@126.com
 * @date 2019-03-22 11:54:48
 */
@Service
public interface StoreAccountService {

    // 服务商自管理平台，登录
    R internal_login(LoginDTO loginDTO);

    //小程序登陆
    ApiResult loginForStore(Map<String, Object> map);

    // 服务商员工
    R internal_getStaffList(Map<String, Object> params);

    R internal_getStaffListLike(Map<String, Object> params);

    // 服务商员工,未绑定收银台的
    R internal_getStaffList_unBangDing(Map<String, Object> params);

    // 服务商添加员工
    R internal_saveStaff(StoreAccountDO storeAccountDO);

    StoreAccountDO get(String accountId);

    //通过账号获取信息
    StoreAccountDO getByAccountName(String accountName);

    //通过多参数获取信息
    StoreAccountDO getByParamsName(Map<String,Object> params);

    List<StoreAccountDO> list(Map<String, Object> map);

    List<StoreAccountDO> listLike(Map<String, Object> map);

    int count(Map<String, Object> map);

    int save(StoreAccountDO storeAccount);

    //后台创建服务商账号staff
    ApiResult saveForAdmin(StoreAccountDO storeAccount);

    int update(StoreAccountDO storeAccount);

    int remove(String accountId);

    int batchRemove(String[] accountIds);

    boolean exits(Map<String, Object> params);

    Set<String> listRoles(String userId);

    int resetPwd(StoreAccountVO storeAccountVO, StoreAccountDO storeAccountDO) throws Exception;

    int adminResetPwd(StoreAccountVO storeAccountVO) throws Exception;

    /**
     * 更新个人信息
     *
     * @param storeAccountDO
     * @return
     */
    int updatePersonal(StoreAccountDO storeAccountDO);

    /**
     * 更新个人图片
     *
     * @param file        图片
     * @param avatar_data 裁剪信息
     * @param userId      用户ID
     * @throws Exception
     */
    Map<String, Object> updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception;

    /**
     * 根据uuids 获取map
     *
     * @param accountUuids
     * @return
     */
    Map<String, StoreAccountDO> getMapByUuids(List<String> accountUuids);

    /**
     * 根据登陆名称获取用户信息
     *
     * @param
     * @return
     */
    ApiResult getByAccountId();

    /**
     * 获取首页流水登陆信息以及余额
     *
     * @return
     */
    ApiResult getUshop();

    /**
     * 获取提现流水
     *
     * @param map
     * @return
     */
    ApiResult getFlowStore(Map<String, String> map);

    ApiResult getFlowStoreWithoutTime();

    /**
     * 修改用户密码
     */
    ApiResult changeUserPassword(Map<String, Object> map);

    /**
     * 增加服务商查询
     * @param map
     * @return
     */
    List<StoreAccountDTO> getStoreAndAgentName(Map<String, Object> map);

    /**
     * 修改状态
     */
    R updateFreezeStatus(Map<String,Object> map);

    int countForMinList(Map<String, Object> map);
}
